﻿
"use strict";

//===================================================================
// 全局变量和命名空间生成方法
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================

/**
 * [GLOBAL 全局变量]
 * @type {Object}
 */
var GLOBAL = {};

/**
 * [namespace 命名空间生成方法]
 * @param  {[type]} str [description]
 * @return {[type]}     [description]
 */
GLOBAL.namespace = function (str) {
    var arr = str.split("."), o = GLOBAL;
    for (var i = (arr[0] == "GLOBAL") ? 1 : 0; i < arr.length; i++) {
        o[arr[i]] = o[arr[i]] || {};
        o = o[arr[i]];
    }
};

//===================================================================
// javascript类继承及实例
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================

/**
 * [extend javascript 类继承方法,兼容低版本IE]
 * @param  {[type]} subClass   [子类]
 * @param  {[type]} superClass [父类]
 * @return {[type]}            [description]
 */
function extend(subClass, superClass) {
    var F = function () { };
    F.prototype = superClass.prototype;
    subClass.prototype = new F();
    subClass.prototype.constructor = subClass;
    subClass.superClass = superClass.prototype;
    if (superClass.prototype.constructor === Object.prototype.constructor) {
        superClass.prototype.constructor = superClass;
    }
}

// function Animal(name) {
//     this.name = name;
//     this.type = "animal";
// }

// Animal.prototype = {
//     say: function () {
//         alert(this.type + "," + this.name);
//     }
// };

// function Bird(name) {
//     this.constructor.superClass.constructor.apply(this, arguments);
//     this.type = "bird";
// }

// extend(Bird, Animal);

// Bird.prototype.fly = function () {
//     alert("I'm flying");
// };

// var canary = new Bird("hehe");
// canary.say();
// canary.fly();




//===================================================================
// 表单验证工具类
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================

/**
 * [isNumber 判断是否是数字]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnIsNumber(val) {
    var regex = /^[\d|\.]+$/;
    return regex.test(val);
}

/**
 * [isInt 判断是否为整数]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnIsInt(val) {
    var regex = /^\d+$/;
    return regex.test(val);
}

/**
 * [isEmail 判断是否为邮箱]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnIsEmail(val) {
    var regex = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
    return regex.test(val);
}

/**
 * [isMobile 判断是否为手机号]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnIsMobile(val) {
    var regex = /^[1][0-9][0-9]{9}$/;
    return regex.test(val);
}

/**
 * [fnCheckCard 身份证验证方法]
 * @param  {[type]} val [description]
 * @return {[type]}     [description]
 */
function fnCheckCard(val) {
    //15位数身份证正则表达式
    //var arg1 = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
    //18位数身份证正则表达式
    var arg2 = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[A-Z])$/;
    //if (str.match(arg1) == null && str.match(arg2) == null) {
    if (val.match(arg2) === null) {
        return false;
    }
    else {
        return true;
    }
}

/**
 * [fnGetBirthByCard 根据身份证获取出生日期]
 * @param  {[type]} val [description]
 * @return {[type]}     [description]
 */
function fnGetBirthByCard(val) {
    return val.substring(6, 10) + "-" + val.substring(10, 12) + "-" + val.substring(12, 14);
}

/**
 * [fnIsNull 判断值是否为null]
 * @param  {[type]} val [description]
 * @return {[type]}     [description]
 */
function fnIsNull(val) {
    return val === null;
}


//===================================================================
// 字符串操作类
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================

/**
 * [trim trim操作]
 * @param  {[type]} val [description]
 * @return {[type]}     [description]
 */
function fnTrim(val) {
    //return val.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
    return val.replace(/^\s+|\s+$/g, "");
}

/**
 * [isEmpty 判断字符串是否为空]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnIsEmpty(val) {
    if (val === null || fnTrim(val).length === 0) {
        return true;
    }
    return false;
}

/**
 * [isEmptyByObject 判断字符串是否为空]
 * @param  {[type]}  obj [description]
 * @return {Boolean}     [description]
 */
function fnIsEmptyByObject(obj) {
    return fnIsEmpty(obj.value);
}

/**
 * [isEquals 判断两个字符串是否相等]
 * @param  {[type]}  val1 [description]
 * @param  {[type]}  val2 [description]
 * @return {Boolean}      [description]
 */
function fnIsEquals(val1, val2) {
    if (val1 === val2) {
        return true;
    }
    return false;
}

/**
 * [isEqualsIgnorecase 忽略大小写判断两个字符串是否相等]
 * @param  {[type]}  val1 [description]
 * @param  {[type]}  val2 [description]
 * @return {Boolean}      [description]
 */
function fnIsEqualsIgnorecase(val1, val2) {
    if (val1.toUpperCase() === val2.toUpperCase()) {
        return true;
    }
    return false;
}

/**
 * [showError 显示错误信息]
 * @param  {[type]} obj    [html元素]
 * @param  {[type]} errmsg [错误信息]
 * @return {[type]}        [description]
 */
function fnShowError(obj, errmsg) {
    alert(errmsg);
    try {
        obj.focus();
    } catch (e) {

    }
}


//===================================================================
// HTML操作工具类
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================
//

/**
 * [fnGetUrlParam 获取url中的参数]
 * @param  {[type]} name [description]
 * @return {[type]}      [description]
 */
function fnGetUrlParam(name) {
    // 使用正则分析法
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
}

/**
 * [isNumber 只能输入数字]
 * @param  {[type]}  val [description]
 * @return {Boolean}     [description]
 */
function fnOnlyNumber() {
    this.value = this.value.replace(/\D/g, '');
}



//===================================================================
// 日期格式化封装
// 张国栋
// lastUpdateTime 2015-11-19
//====================================================================

// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符， 
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
// 例子： 
// (new Date()).Format("yyyy-MM-dd HH:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
Date.prototype.Format = function (fmt) {
    var o = {
        "M+": this.getMonth() + 1, //月份 
        "d+": this.getDate(), //日 
        "h+": this.getHours(), //小时 
        "m+": this.getMinutes(), //分 
        "s+": this.getSeconds(), //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds() //毫秒 
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}
